﻿using QLBH.DTO;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace QLBH.DATA
{
    public class NhanVienData
    {
        private static QLBHEntities db = new QLBHEntities();
        public string Error { set; get; }

        public List<NHAN_VIEN> TimNhanVienTheoTen(string ten_nhan_vien, int tong_so_dong)
        {

            List<NHAN_VIEN> list = new List<NHAN_VIEN>();
            if (ten_nhan_vien == "")
            {
                list = db.NHAN_VIEN.Include("PHONG_BAN").Where(p => p.DA_XOA == false).ToList().Skip(tong_so_dong).Take(20).ToList().Select(p => new NHAN_VIEN()
                    {
                        DA_XOA = p.DA_XOA,
                        DIA_CHI = p.DIA_CHI,
                        DIEN_THOAI = p.DIEN_THOAI,
                        EMAIL = p.EMAIL,
                        GHI_CHU = p.GHI_CHU,
                        GIOI_TINH = p.GIOI_TINH,
                        HINH = p.HINH,
                        HO = p.HO,
                        LAN_SUA_CUOI = p.LAN_SUA_CUOI,
                        MA_NHAN_VIEN = p.MA_NHAN_VIEN,
                        MA_PHONG_BAN = p.MA_PHONG_BAN,
                        MA_SO_THUE = p.MA_SO_THUE,
                        NGAY_SINH = p.NGAY_SINH,
                        NGAY_THUE = p.NGAY_THUE,
                        NGUOI_SUA = p.NGUOI_SUA,
                        PHONG_BAN = new PHONG_BAN()
                        {
                            MA_PHONG_BAN = p.PHONG_BAN.MA_PHONG_BAN,
                            TEN_PHONG_BAN = p.PHONG_BAN.TEN_PHONG_BAN
                        }
                    }).ToList();
            }
            else
                list = db.NHAN_VIEN.Include("PHONG_BAN").Where(p => p.DA_XOA == false && p.TEN.Contains(ten_nhan_vien)).ToList().Skip(tong_so_dong).Take(20).ToList().Select(p => new NHAN_VIEN()
                {
                    DA_XOA = p.DA_XOA,
                    DIA_CHI = p.DIA_CHI,
                    DIEN_THOAI = p.DIEN_THOAI,
                    EMAIL = p.EMAIL,
                    GHI_CHU = p.GHI_CHU,
                    GIOI_TINH = p.GIOI_TINH,
                    HINH = p.HINH,
                    HO = p.HO,
                    LAN_SUA_CUOI = p.LAN_SUA_CUOI,
                    MA_NHAN_VIEN = p.MA_NHAN_VIEN,
                    MA_PHONG_BAN = p.MA_PHONG_BAN,
                    MA_SO_THUE = p.MA_SO_THUE,
                    NGAY_SINH = p.NGAY_SINH,
                    NGAY_THUE = p.NGAY_THUE,
                    NGUOI_SUA = p.NGUOI_SUA,
                    PHONG_BAN = new PHONG_BAN()
                    {
                        MA_PHONG_BAN = p.PHONG_BAN.MA_PHONG_BAN,
                        TEN_PHONG_BAN = p.PHONG_BAN.TEN_PHONG_BAN
                    }
                }).ToList(); ;
            return list;
        }


        private string TaoMa()
        {
            string result = "";
            if (db.NHAN_VIEN.ToList().Count <= 0)
            {
                result = "0001";
            }
            else
            {
                int maxId = 0;

                foreach (var item in db.NHAN_VIEN.ToList())
                {
                    if (maxId < int.Parse(item.MA_NHAN_VIEN.Substring(2)))
                    {
                        maxId = int.Parse(item.MA_NHAN_VIEN.Substring(2));
                    }
                }
                switch (maxId.ToString().Length)
                {
                    case 1:
                        result = "000" + (maxId + 1);
                        break;


                    case 2:
                        result = "00" + (maxId + 1);
                        break;


                    case 3:
                        result = "0" + (maxId + 1);
                        break;


                    case 4:
                        result = "" + (maxId + 1);
                        break;
                    default:
                        break;
                }
            }
            return "NV" + result;
        }

        public bool ThemMoi(NHANVIENPARAM NhanVien)
        {
            try
            {
                NHAN_VIEN NV = new NHAN_VIEN();
                NV.MA_NHAN_VIEN = NhanVien.MA_NHAN_VIEN;
                NV.DA_XOA = false;
                NV.DIA_CHI = NhanVien.DIA_CHI;
                NV.DIEN_THOAI = NhanVien.DIEN_THOAI;
                NV.EMAIL = NhanVien.EMAIL;
                NV.GHI_CHU = NhanVien.GHI_CHU;
                NV.GIOI_TINH = NhanVien.GIOI_TINH;
                NV.HINH = NhanVien.HINH;
                NV.HO = NhanVien.HO;
                NV.LAN_SUA_CUOI = DateTime.Now;
                NV.MA_PHONG_BAN = NhanVien.MA_PHONG_BAN;
                NV.MA_SO_THUE = NhanVien.MA_SO_THUE;
                NV.NGAY_SINH = NhanVien.NGAY_SINH;
                NV.NGAY_THUE = NhanVien.NGAY_THUE;
                NV.NGUOI_SUA = NhanVien.NGUOI_SUA;
                NV.SO_CMND = NhanVien.SO_CMND;
                NV.TEN = NhanVien.TEN;

                if (NV.MA_NHAN_VIEN.Trim().Length <= 0)
                {
                    NV.MA_NHAN_VIEN = TaoMa();
                }
                else if (db.NHAN_VIEN.Any(p => p.MA_NHAN_VIEN == NV.MA_NHAN_VIEN))
                {
                    Error = "Mã nhân viên đã tồn tại";
                    return false;
                }

                db.NHAN_VIEN.Add(NV);
                db.SaveChanges();
                return true;
            }
            catch (Exception ex)
            {
                Error = ex.Message+"--" +ex.InnerException.Message;
                return false;
            }
        }

        public bool CapNhat(NHANVIENPARAM NhanVien)
        {
            try
            {

                NHAN_VIEN NV = db.NHAN_VIEN.Where(p => p.MA_NHAN_VIEN == NhanVien.MA_NHAN_VIEN).FirstOrDefault();
                if (NV == null)
                {
                    Error = "khách hàng không tồn tại";
                    return false;
                }

                if (NV.LAN_SUA_CUOI.ToString("ddMMyyyyhhmmss") != NhanVien.LAN_SUA_CUOI.ToString("ddMMyyyyhhmmss"))
                {
                    Error = "khách hàng đã được sửa bởi " + NV.NGUOI_SUA + " Vào lúc : " + NV.LAN_SUA_CUOI.ToString("dd/MM/yyyy hh:mm:ss");
                    return false;
                }

                NV.DA_XOA = false;
                NV.DIA_CHI = NhanVien.DIA_CHI;
                NV.DIEN_THOAI = NhanVien.DIEN_THOAI;
                NV.EMAIL = NhanVien.EMAIL;
                NV.GHI_CHU = NhanVien.GHI_CHU;
                NV.GIOI_TINH = NhanVien.GIOI_TINH;
                NV.HINH = NhanVien.HINH;
                NV.HO = NhanVien.HO;
                NV.LAN_SUA_CUOI = DateTime.Now;
                NV.MA_PHONG_BAN = NhanVien.MA_PHONG_BAN;
                NV.MA_SO_THUE = NhanVien.MA_SO_THUE;
                NV.NGAY_SINH = NhanVien.NGAY_SINH;
                NV.NGAY_THUE = NhanVien.NGAY_THUE;
                NV.NGUOI_SUA = NhanVien.NGUOI_SUA;
                NV.SO_CMND = NhanVien.SO_CMND;
                NV.TEN = NhanVien.TEN;
                db.SaveChanges();
                return true;
            }
            catch (Exception ex)
            {
                Error = ex.Message + "--" + ex.InnerException.Message;
                return false;
            }
        }

        public bool Xoa(string[] MA_NHAN_VIEN)
        {
            try
            {
                for (int i = 0; i < MA_NHAN_VIEN.Length; i++)
                {
                    string m = MA_NHAN_VIEN[i];
                    NHAN_VIEN n = db.NHAN_VIEN.Where(p => p.MA_NHAN_VIEN == m).FirstOrDefault();
                    if (n == null)
                    {
                        Error = "Nhân viên không tồn tại";
                        return false;
                    }

                    n.DA_XOA = true;
                    db.SaveChanges();
                }

                return true;
            }
            catch (Exception ex)
            {
                Error = ex.Message + "--" + ex.InnerException.Message;
                return false;
            }
        }
    }
}